package chapter12;

import java.io.IOException;

public class TestGetCause {
	public void testCause(int i) {
		try {
			switch (i) {
			case 0:
				throw new ArrayIndexOutOfBoundsException();
			case 1:
				throw new ArithmeticException();
			default:
				throw new RuntimeException();
			}
		} catch (Exception e) {
			// 异常链，通过抛出的异常getCause可以得到上一级的异常
			// 只有Error,Exception,RuntimeException提供了带cause的构造函数，其余的Exception类需要通过
			//initCause（）来实现异常链的效果。
			try {
				// throw new RuntimeException(e);
				IOException ie = new IOException();
				ie.initCause(e);
				throw ie;
			} catch (IOException ee) {
				ee.printStackTrace();
			}
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Random a = new Random();
		TestGetCause t = new TestGetCause();
		//int i = 0;
		// while (i++ != 10) {
		// try {
		t.testCause(1);
		// }
		// catch (RuntimeException e) {
		// try {
		// throw e.getCause();
		// } catch (Throwable e1) {
		// // TODO Auto-generated catch block
		// //System.out.println(e1.getClass());
		// }
		// }
		// }

	}

}
